﻿using System;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using Controllers;
using Interfaces;
using Utilities;

namespace Views.Moduler
{
    public partial class BrugerUdlån : Window
    {
        #region Fields

        private readonly Controller _controller;
        private IUdlån _selectedUdlån;
        private readonly IBruger _bruger;

        #endregion

        #region Creation

        public BrugerUdlån(Controller controller, IBruger bruger)
        {
            InitializeComponent();
            _controller = controller;
            _bruger = bruger;

            Title = String.Format("Udlåns oversigt");
            LblAlleUdlånTitel.Content = String.Format("Udlåns oversigt for brugeren: {0}", bruger.Initialer);

            OpdaterAlleUdlånListView();
        }

        #endregion

        #region Event handlers

        private void ListViewAlleUdlån_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            _selectedUdlån = ListViewAlleUdlån.SelectedItem as IUdlån;

            bool udlånErValgt = (_selectedUdlån != null);

            BtnFjernUdlån.IsEnabled = udlånErValgt;
            BtnOpdaterUdlån.IsEnabled = udlånErValgt;
            BtnUdskrivKontrakt.IsEnabled = udlånErValgt;
        }

        private void BtnOpdaterUdlån_Click(object sender, RoutedEventArgs e)
        {
            if (_selectedUdlån == null) return;

            var afdeling = _controller.HentBrugersAfdeling(_bruger);

            var form = new Form();

            form.Title = "Opdater udlån";
            form.BtnSubmit = "Opdater";

            form.CreateTextBox("navn", "Brugerens navn:", _bruger.Navn);
            form.CreateTextBox("initialer", "Brugerens initialer:", _bruger.Initialer);
            form.CreateTextBox("afdeling", "Brugerens afdeling:", afdeling.Navn);
            form.CreateDateBox("dato", "Udlånsdato:", _selectedUdlån.UdlånsDato);
            form.CreateTextBox("antal", "Antal:", _selectedUdlån.Antal.ToString());

            var window = new FormWindow(form);
            if (window.ShowDialog() == true)
            {
                // formularen blev submitted
                DateTime dato = (DateTime) form.Result["dato"];
                string antal = (string) form.Result["antal"];

                if (antal.IsIntegerGreaterThanZero())
                {
                    bool opdateret = _controller.OpdaterUdlån(_selectedUdlån, int.Parse(antal), dato);

                    if (opdateret)
                    {
                        OpdaterAlleUdlånListView();
                    }
                }
            }
        }

        private void MenuItemSletUdlån_Click(object sender, RoutedEventArgs e)
        {
            if (_selectedUdlån == null) return;

            var result = MessageBox.Show("Er du sikker på du vil fjerne udlånet?", "Er du sikker?",
                                         MessageBoxButton.YesNo, MessageBoxImage.Exclamation);

            if (result != MessageBoxResult.Yes) return;
            bool fjernet = _controller.FjernUdlån(_selectedUdlån);

            if (fjernet)
                OpdaterAlleUdlånListView();
        }

        private void UdskrivKontrakt(object sender, RoutedEventArgs e)
        {
            var udlånsListe = ListViewAlleUdlån.SelectedItems.Cast<IUdlån>().ToList();
            _controller.UdskrivKontrakt(udlånsListe);
        }

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Escape)
                Close();
        }

        #endregion

        #region Tilstandsstyring

        public void OpdaterAlleUdlånListView()
        {
            ListViewAlleUdlån.ItemsSource = null;
            ListViewAlleUdlån.ItemsSource = _controller.HentUdlånMedBruger(_bruger);   
        }

        #endregion
    }
}
